package com.miyu.common.utils.comService;

import com.miyu.common.pojo.WebServicePJ;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

/**
 * 对外链接数据下载时使用
 * 返回流数据 或字符串
 * 一般应用场景 获取下载 或获取连接数据时使用
 */
public class WebHttpService {

    /**
     * 通过传入URl返回数据
     * 以流的形式返回 可提供下载 字符转换
     * 只需介入链接地址
     * @return
     */
    public static String getWebHttpServiceStr  (WebServicePJ pj) throws Exception {
        String rs = "";
        InputStream inputStream = getBufferedReader(pj);
        BufferedReader bufferedReader = null;
        try {
            if(inputStream!=null){
                // 封装输入流，并指定字符集
                  bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
                  // 存放数据
                StringBuilder sbf = new StringBuilder();
                String temp;
                while ((temp = bufferedReader.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append(System.getProperty("line.separator")); //换行符操作
                }
                rs = sbf.toString();
            }
        }catch (Exception e){
            e.printStackTrace();

        }finally {
            if(null!=inputStream) {
                inputStream.close();
            }
            if (null!=bufferedReader) {
                bufferedReader.close();
            }
        }
        return  rs;
    }

    /**
     * 获取流数据
     * @param pj
     * @return
     * @throws Exception
     */
    public static InputStream getBufferedReader(WebServicePJ pj) throws Exception {
        InputStream inputStream = null;
        HttpURLConnection connection = null;
        try {
        // 创建远程url连接对象
        URL url = new URL(new StringBuffer(pj.getUrl()).toString());
        // 通过远程url连接对象打开一个连接，强转成httpURLConnection类
        connection = (HttpURLConnection) url.openConnection();
        // 设置连接方式：get
        connection.setRequestMethod(pj.getMethod());
        // 设置连接主机服务器的超时时间：15000毫秒
        connection.setConnectTimeout(pj.getConnectTimeout());
        // 设置读取远程返回的数据时间：60000毫秒
        connection.setReadTimeout(pj.getReadTimeout());
        // 发送请求
        connection.connect();
            // 通过connection连接，获取输入流
        if (connection.getResponseCode() == 200) {
                inputStream = connection.getInputStream();
        }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
//            if (null != inputStream) {
//                inputStream.close();
//            }
//            if (connection != null) {
//                connection.disconnect();// 关闭远程连接
//            }
        }
        return  inputStream;
    }
}
